package Demo9;

/**
 * 长度最小的字数组
 * https://leetcode.cn/problems/minimum-size-subarray-sum/
 * 采用的是滑动窗口算法来实现
 * 由于数据都是大于0 的,可以利用这个规律,单调性
 * 创建一个left 一个 right 来遍历我们的数组
 * 维护我们的left 和right 实现我们的滑动窗口的效果
 */
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int sum = 0,ret = Integer.MAX_VALUE,len = nums.length;
        for(int left = 0, right = 0;right < len;right++) {// 初始化
            sum += nums[right];// 进入窗口
            while(sum >= target) {// 判断
                ret = Math.min(ret, right - left + 1);// 更新最小值值
                sum -= nums[left++];// 出窗口
            }
        }
        return ret == Integer.MAX_VALUE ? 0 : ret;
    }
}
class Demo {
    public static void main(String[] args) {
        Solution solution = new Solution();
        int ret = solution.minSubArrayLen(11,new int[] {1,2,3,4,5});
        System.out.println(ret);
    }
}